package com.njbw.design_pattern.struct.proxy.staticProxy.ext;

import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;

/**
 *
 * @author 黄侯淳
 * @since JDK 1.8
 */
@Slf4j
public class DatabaseDataQueryProxy extends DatabaseDataQuery {

    // 我们要实现缓存，需要一个数据结构
    HashMap<String, String> cache = new HashMap<>(256);

    // 1、屏蔽被代理对象
    public DatabaseDataQueryProxy() {
    }

    @Override
    public String query(String queryKey) {
        // 2、对被代理对象的方法做增强
        // a.查询缓存
        String result = cache.get(queryKey);
        // b.命中缓存则返回
        if (null != result) {
            log.info("命中缓存，走缓存...");
            return result;
        }
        // c.未命中缓存则调用被代理对象查询数据库
        result = super.query(queryKey);
        // d.如果有结果，需要将结果缓存
        if (null != result) {
            cache.put(queryKey, result);
        }
        log.info("未命中缓存，走数据库...");
        return result;
    }
}
